package br.com.yahoo.mau_mss.tutorlucene.service.impl;

import java.io.File;
import org.apache.commons.lang3.SystemUtils;
import org.springframework.stereotype.Service;

/**
 * Bean utilitário que contém as configurações para a pasta de indexação e
 * armazenamento dos currículos.
 * @author Paulo Sigrist / Wilson A. Higashino
 */
@Service("configBean")
public class ConfigBean {
  /**
   * Pasta do armazenamento de currículos
   * @see #rootFolder
   */
  private static final String DIRECTORY_FILES = SystemUtils.FILE_SEPARATOR + "files" + SystemUtils.FILE_SEPARATOR;
  /**
   * Pasta que contém o índice
   * @see #rootFolder
   */
  private static final String DIRECTORY_INDEX = SystemUtils.FILE_SEPARATOR + "index" + SystemUtils.FILE_SEPARATOR;
  /**
   * Pasta raiz dos arquivos da aplicação.
   */
  private String rootFolder;

  /**
   * Construtor padrão.
   * Inicializa a pasta de indexação e armazenamento de currículos
   */
  public ConfigBean() {
    setRootFolder(criarStorage());
  }
  
  /**
   * Cria um diretório de storageLocal para armazenar o índice.
   * Se for em user_dir =  C:\Java\Apache\tomcat-7.0.34\bin\tutorLucene
   * Se for em user_home = C:\Users\mauricio.soares\tutorLucene
   * @return 
   */
  private String criarStorage() {
    String diretorioStorage = SystemUtils.USER_HOME + SystemUtils.FILE_SEPARATOR + "tutorLucene";
    criarDiretorio(diretorioStorage);
    return diretorioStorage;
  }

  /**
   * 
   * @return retorna a pasta de armazenamento de currículos
   * @see #DIRECTORY_FILES
   * @see #getRootFolder()
   */
  public String getFilesDirectory() {
    String diretorioFiles = getRootFolder() + ConfigBean.DIRECTORY_FILES;
    criarDiretorio(diretorioFiles);
    return diretorioFiles;
  }

  /**
   * 
   * @return retorna a pasta que contém o índice
   * @see #DIRECTORY_INDEX
   * @see #getRootFolder()
   */
  public String getIndexDirectory() {
    String diretorioIndex = getRootFolder() + ConfigBean.DIRECTORY_INDEX;
    criarDiretorio(diretorioIndex);
    return diretorioIndex;
  }

  /**
   * @return the rootFolder
   */
  public String getRootFolder() {
    return rootFolder;
  }

  /**
   * @param rootFolder the rootFolder to set
   */
  public void setRootFolder(String rootFolder) {
    this.rootFolder = rootFolder;
  }

  private void criarDiretorio(String diretorio) throws IllegalArgumentException {
    final File dir = new File(diretorio);
    if (!dir.exists() && !dir.mkdirs()) {
        throw new IllegalArgumentException("Incapaz de criar " + diretorio);
    }
  }

}
